Skip to content

wasm: fix reflected method calls and optimized Asyncify exports - #2720

Merged
cpunion merged 10 commits into
xgo-dev:mainfrom
cpunion:codex/fix-size-wasm-correctness-2679-20261003
Oct 4, 2026
Merged

cpunion merged 10 commits into
xgo-dev:mainfrom
cpunion:codex/fix-size-wasm-correctness-2679-20261003

Conversation

@cpunion

@cpunion cpunion commented Oct 3, 2026 •

Copy link
Copy Markdown
Collaborator

Calling a reflected method through Value.Method[ByName]().Interface() can miss the typed Wasm bridge and trap. Recognize direct, bound and interface-held method-value paths, including interfaces returning an alias of reflect.Value, while keeping reflect.Type metadata inspection free of these bridges.

Restore the requested Emscripten O3/Os/Oz link level. A preRun binding keeps Asyncify's control exports visible to MetaDCE while preserving public Module exports and user hooks. Declare native EH capabilities, preserve pthread features, and include EMCC_CFLAGS in package fingerprints.

Add independent reflected method-value executables, native result-oracle tests and optimized Node/Chrome acceptance cases. Also clean up Chrome child processes, allow creator-thread teardown in the Windows GC smoke, and retain signal-termination diagnostics for coverage-enabled tests.

Part of #2679.

Validation: compiler/cache tests; the complete macOS LLVM 22 LLGo core suite with atomic coverage; both reflected method fixtures under native Go, LLGo and Wasmer; Node Asyncify and browser-process tests; CI workflow tests. Optimized Node/Chrome O3/Os/Oz callback, C ABI/EH, filesystem and multi-worker cases were also validated during development and are enforced in CI.

@fennoai fennoai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review: WASM reflect correctness + Emscripten link-level fix

Solid, well-scoped change. The signature-based bridge detection (distinguishing reflect.Value.Method from reflect.Type.Method) addresses the root cause of #2679 directly rather than masking it, and replacing the opaque O3/Os/Oz→O2 link-level downgrade with an explicit --pre-js shim restores the user-requested optimization level while keeping Asyncify correctness. Test coverage is strong across method-value vs. type-metadata, dead-code pruning, bound-method escape, and interface-held reflect.Value cases.

Findings are documentation-accuracy only; no correctness or security blockers were found. The security pass flagged no medium-or-above issues (the --pre-js shim is safe against prototype pollution, and test/wasm/optimization/test.py has no shell/subprocess injection exposure).

Comment thread internal/build/wasm_reflect.go

@fennoai fennoai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review (addendum): shim comment accuracy

One documentation-accuracy finding on the new Asyncify shim (see inline).

Comment thread targets/emscripten-asyncify-exports.js Outdated
@codecov

codecov Bot commented Oct 3, 2026 •

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 96.49123% with 2 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
test/wasm/reflect-method-alias/main.go 85.71% 1 Missing ⚠️
test/wasm/reflect-method-value/main.go 93.33% 1 Missing ⚠️

📢 Thoughts on this report? Let us know!

@github-actions

github-actions Bot commented Oct 3, 2026 •

Copy link
Copy Markdown

LLGo WebAssembly build benchmarks

3976fa396117 | workflow run | long-term charts

WebAssembly output sizes
Example, profile and compiler Wasm module vs base Generated JS glue vs base
cprintf/j32-emscripten/LLGo 149240 B -4953 B / -3.2% (better) 88157 B -585 B / -0.7% (better)
cprintf/j32-goos-js/LLGo 148511 B -3784 B / -2.5% (better) 72985 B -180 B / -0.2% (better)
cprintf/j64-emscripten-memory64/LLGo 136707 B -4541 B / -3.2% (better) 91328 B -1302 B / -1.4% (better)
cprintf/w32-goos-wasip1/LLGo 153508 B 0 B / +0.0% 0 B 0 B / 0.0%
cprintf/w32-wasi/LLGo 154198 B 0 B / +0.0% 0 B 0 B / 0.0%
fmtprintf/j32-emscripten/LLGo 3049126 B -164486 B / -5.1% (better) 130373 B -2069 B / -1.6% (better)
fmtprintf/j32-goos-js/Go 2526852 B 0 B / +0.0% 0 B 0 B / 0.0%
fmtprintf/j32-goos-js/LLGo 3145152 B -47554 B / -1.5% (better) 100773 B -862 B / -0.8% (better)
fmtprintf/j64-emscripten-memory64/LLGo 2811842 B -138376 B / -4.7% (better) 135853 B -3432 B / -2.5% (better)
fmtprintf/w32-goos-wasip1/Go 2500019 B 0 B / +0.0% 0 B 0 B / 0.0%
fmtprintf/w32-goos-wasip1/LLGo 2349336 B 0 B / +0.0% 0 B 0 B / 0.0%
fmtprintf/w32-wasi/LLGo 2345976 B 0 B / +0.0% 0 B 0 B / 0.0%
j32-emscripten/LLGo 148582 B -4846 B / -3.2% (better) 88157 B -585 B / -0.7% (better)
j32-goos-js/Go 1895533 B 0 B / +0.0% 0 B 0 B / 0.0%
j32-goos-js/LLGo 148002 B -3766 B / -2.5% (better) 72985 B -180 B / -0.2% (better)
j64-emscripten-memory64/LLGo 136047 B -4535 B / -3.2% (better) 91328 B -1302 B / -1.4% (better)
reflectcall/j32-emscripten/LLGo 1473259 B -70706 B / -4.6% (better) 104917 B -991 B / -0.9% (better)
reflectcall/j32-goos-js/Go 2191221 B 0 B / +0.0% 0 B 0 B / 0.0%
reflectcall/j32-goos-js/LLGo 1523186 B -23234 B / -1.5% (better) 89743 B -588 B / -0.7% (better)
reflectcall/j64-emscripten-memory64/LLGo 1366025 B -62609 B / -4.4% (better) 109492 B -2149 B / -1.9% (better)
reflectcall/w32-goos-wasip1/Go 2205707 B 0 B / +0.0% 0 B 0 B / 0.0%
reflectcall/w32-goos-wasip1/LLGo 1277776 B 0 B / +0.0% 0 B 0 B / 0.0%
reflectcall/w32-wasi/LLGo 1275362 B 0 B / +0.0% 0 B 0 B / 0.0%
w32-goos-wasip1/Go 1909947 B 0 B / +0.0% 0 B 0 B / 0.0%
w32-goos-wasip1/LLGo 153155 B 0 B / +0.0% 0 B 0 B / 0.0%
w32-wasi/LLGo 153845 B 0 B / +0.0% 0 B 0 B / 0.0%
LLGo WebAssembly build measurements
Example and profile Build vs base
j32-emscripten 6.895 s +572.7 ms / +9.1% (worse)
j32-goos-js 6.548 s +552.3 ms / +9.2% (worse)
j64-emscripten-memory64 6.121 s +742.3 ms / +13.8% (worse)
reflectcall/w32-wasi 23.700 s -255.2 ms / -1.1% (better)
w32-goos-wasip1 4.234 s -140.2 ms / -3.2% (better)
w32-wasi 4.087 s -118.2 ms / -2.8% (better)

Compared with 1b01cb9724ba measured in the same runner job.

@cpunion
cpunion force-pushed the codex/fix-size-wasm-correctness-2679-20261003 branch from edf8eb4 to 6dfcebe Compare October 3, 2026 05:29
@github-actions

github-actions Bot commented Oct 3, 2026 •

Copy link
Copy Markdown

LLGo baseline benchmarks

3976fa396117 | workflow run | long-term charts

Program measurements

Platform Workload File size vs base Text size vs base Build vs base Run vs base
Linux cprintf 8568 B 0 B / +0.0% 387 B 0 B / +0.0% 970.849 ms +25.54 ms / +2.7% (worse) 1.253 ms -20.74 us / -1.6% (better)
Linux cprintf-lto 8408 B 0 B / +0.0% 368 B 0 B / +0.0% 950.040 ms -2.083 ms / -0.2% (better) 1.298 ms +23.57 us / +1.8% (worse)
Linux fmtprintf 4880944 B 0 B / +0.0% 501619 B 0 B / +0.0% 7.361 s -164.3 ms / -2.2% (better) 3.151 ms +193.5 us / +6.5% (worse)
Linux fmtprintf-lto 3600808 B 0 B / +0.0% 438538 B 0 B / +0.0% 16.100 s -202 ms / -1.2% (better) 2.913 ms +86.96 us / +3.1% (worse)
Linux println 674952 B 0 B / +0.0% 16855 B 0 B / +0.0% 993.607 ms +1.431 ms / +0.1% (worse) 1.567 ms -108.3 us / -6.5% (better)
Linux println-lto 190024 B 0 B / +0.0% 14273 B 0 B / +0.0% 1.296 s -34.59 ms / -2.6% (better) 1.624 ms -21.16 us / -1.3% (better)
macOS cprintf 50736 B 0 B / +0.0% 4409 B 0 B / +0.0% 1.232 s +70.46 ms / +6.1% (worse) 4.027 ms -1.582 ms / -28.2% (better)
macOS cprintf-lto 50496 B 0 B / +0.0% 161 B 0 B / +0.0% 1.171 s +49 ms / +4.4% (worse) 5.573 ms +2.237 ms / +67.1% (worse)
macOS fmtprintf 1773456 B 0 B / +0.0% 877780 B 0 B / +0.0% 6.370 s +124.1 ms / +2.0% (worse) 10.053 ms +70.5 us / +0.7% (worse)
macOS fmtprintf-lto 1360928 B 0 B / +0.0% 762428 B 0 B / +0.0% 12.504 s -935 ms / -7.0% (better) 5.625 ms -67.42 us / -1.2% (better)
macOS println 99344 B 0 B / +0.0% 24216 B 0 B / +0.0% 1.248 s +84.82 ms / +7.3% (worse) 5.945 ms +245.3 us / +4.3% (worse)
macOS println-lto 83664 B 0 B / +0.0% 21457 B 0 B / +0.0% 1.624 s +246.8 ms / +17.9% (worse) 8.012 ms +399 us / +5.2% (worse)
Windows MinGW cprintf 651264 B 0 B / +0.0% 4550 B 0 B / +0.0% 1.433 s +57.59 ms / +4.2% (worse) 3.356 ms +473.4 us / +16.4% (worse)
Windows MinGW cprintf-lto 43520 B 0 B / +0.0% 4486 B 0 B / +0.0% 1.482 s +56.9 ms / +4.0% (worse) 2.929 ms +105 us / +3.7% (worse)
Windows MinGW fmtprintf 5432832 B 0 B / +0.0% 600310 B 0 B / +0.0% 7.102 s +1.048 s / +17.3% (worse) 8.180 ms +1.36 ms / +19.9% (worse)
Windows MinGW fmtprintf-lto 4127232 B 0 B / +0.0% 546582 B 0 B / +0.0% 14.281 s -57.85 ms / -0.4% (better) 6.330 ms -2.029 ms / -24.3% (better)
Windows MinGW println 706560 B 0 B / +0.0% 25190 B 0 B / +0.0% 1.526 s +177.7 ms / +13.2% (worse) 5.880 ms +406.5 us / +7.4% (worse)
Windows MinGW println-lto 208896 B 0 B / +0.0% 22054 B 0 B / +0.0% 1.654 s +21.48 ms / +1.3% (worse) 5.448 ms +285.2 us / +5.5% (worse)
Windows MinGW 386 cprintf 601600 B 0 B / +0.0% 5326 B 0 B / +0.0% 1.772 s +17.03 ms / +1.0% (worse) 5.169 ms -24.9 us / -0.5% (better)
Windows MinGW 386 cprintf-lto 103424 B 0 B / +0.0% 5094 B 0 B / +0.0% 1.816 s +4.644 ms / +0.3% (worse) 5.225 ms -1.093 ms / -17.3% (better)
Windows MinGW 386 fmtprintf 4745216 B 0 B / +0.0% 472478 B 0 B / +0.0% 7.850 s +152.5 ms / +2.0% (worse) 10.639 ms -121.4 us / -1.1% (better)
Windows MinGW 386 fmtprintf-lto 4148736 B 0 B / +0.0% 451114 B 0 B / +0.0% 15.327 s +317.2 ms / +2.1% (worse) 10.917 ms -429.4 us / -3.8% (better)
Windows MinGW 386 println 653312 B 0 B / +0.0% 21490 B 0 B / +0.0% 1.810 s -42.57 ms / -2.3% (better) 9.046 ms -61.2 us / -0.7% (better)
Windows MinGW 386 println-lto 258560 B 0 B / +0.0% 19306 B 0 B / +0.0% 2.107 s +629.1 us / +0.02986% (worse) 9.295 ms +377.1 us / +4.2% (worse)
Windows MinGW ARM64 cprintf 661504 B 0 B / +0.0% 4408 B 0 B / +0.0% 1.935 s +35.35 ms / +1.9% (worse) 6.706 ms +274.2 us / +4.3% (worse)
Windows MinGW ARM64 cprintf-lto 43520 B 0 B / +0.0% 4340 B 0 B / +0.0% 1.971 s +30.13 ms / +1.6% (worse) 6.493 ms -68 us / -1.0% (better)
Windows MinGW ARM64 fmtprintf 5343744 B 0 B / +0.0% 510876 B 0 B / +0.0% 7.080 s +41.28 ms / +0.6% (worse) 12.906 ms +382.5 us / +3.1% (worse)
Windows MinGW ARM64 fmtprintf-lto 4302336 B 0 B / +0.0% 477264 B 0 B / +0.0% 13.814 s +16.73 ms / +0.1% (worse) 13.060 ms +158.5 us / +1.2% (worse)
Windows MinGW ARM64 println 714240 B 0 B / +0.0% 23884 B 0 B / +0.0% 1.939 s +2.422 ms / +0.1% (worse) 11.579 ms -206.8 us / -1.8% (better)
Windows MinGW ARM64 println-lto 215552 B 0 B / +0.0% 21232 B 0 B / +0.0% 2.182 s +4.16 ms / +0.2% (worse) 11.319 ms -497.8 us / -4.2% (better)
Windows MSVC cprintf 893952 B 0 B / +0.0% 65798 B 0 B / +0.0% 1.552 s -226.7 ms / -12.7% (better) 3.415 ms +81 us / +2.4% (worse)
Windows MSVC cprintf-lto 289792 B 0 B / +0.0% 65734 B 0 B / +0.0% 1.564 s +2.711 ms / +0.2% (worse) 3.322 ms +53.5 us / +1.6% (worse)
Windows MSVC fmtprintf 5732864 B 0 B / +0.0% 695862 B 0 B / +0.0% 6.989 s -25.28 ms / -0.4% (better) 10.474 ms +1.695 ms / +19.3% (worse)
Windows MSVC fmtprintf-lto 4449792 B 0 B / +0.0% 646134 B 0 B / +0.0% 13.586 s -418.5 ms / -3.0% (better) 8.782 ms -639.8 us / -6.8% (better)
Windows MSVC println 1017344 B 0 B / +0.0% 120854 B 0 B / +0.0% 1.561 s +22.14 ms / +1.4% (worse) 6.927 ms -101.5 us / -1.4% (better)
Windows MSVC println-lto 528384 B 0 B / +0.0% 118390 B 0 B / +0.0% 2.067 s +287.6 ms / +16.2% (worse) 11.344 ms +4.228 ms / +59.4% (worse)
Windows MSVC 386 cprintf 513536 B 0 B / +0.0% 3931 B 0 B / +0.0% 1.588 s +49.72 ms / +3.2% (worse) 5.641 ms +245.8 us / +4.6% (worse)
Windows MSVC 386 cprintf-lto 44032 B 0 B / +0.0% 3853 B 0 B / +0.0% 1.542 s -42.6 ms / -2.7% (better) 6.357 ms -886.3 us / -12.2% (better)
Windows MSVC 386 fmtprintf 4479488 B 0 B / +0.0% 455868 B 0 B / +0.0% 7.199 s -51.15 ms / -0.7% (better) 11.869 ms +6.7 us / +0.1% (worse)
Windows MSVC 386 fmtprintf-lto 3899392 B 0 B / +0.0% 426651 B 0 B / +0.0% 13.582 s +59.58 ms / +0.4% (worse) 12.011 ms +740.4 us / +6.6% (worse)
Windows MSVC 386 println 567296 B 0 B / +0.0% 20340 B 0 B / +0.0% 1.768 s +213.3 ms / +13.7% (worse) 10.287 ms +922 us / +9.8% (worse)
Windows MSVC 386 println-lto 199168 B 0 B / +0.0% 18501 B 0 B / +0.0% 1.882 s +94.63 ms / +5.3% (worse) 9.758 ms +221.6 us / +2.3% (worse)
Windows MSVC ARM64 cprintf 662528 B 0 B / +0.0% 4192 B 0 B / +0.0% 1.690 s +158 ms / +10.3% (worse) 8.056 ms +1.389 ms / +20.8% (worse)
Windows MSVC ARM64 cprintf-lto 47616 B 0 B / +0.0% 4084 B 0 B / +0.0% 1.556 s +17.92 ms / +1.2% (worse) 6.360 ms +210.7 us / +3.4% (worse)
Windows MSVC ARM64 fmtprintf 5339648 B 0 B / +0.0% 510808 B 0 B / +0.0% 6.783 s +33.24 ms / +0.5% (worse) 15.654 ms +2.319 ms / +17.4% (worse)
Windows MSVC ARM64 fmtprintf-lto 4309504 B 0 B / +0.0% 477924 B 0 B / +0.0% 12.660 s -466.6 ms / -3.6% (better) 14.346 ms +714.4 us / +5.2% (worse)
Windows MSVC ARM64 println 715264 B 0 B / +0.0% 23908 B 0 B / +0.0% 1.679 s +21.59 ms / +1.3% (worse) 13.732 ms +1.013 ms / +8.0% (worse)
Windows MSVC ARM64 println-lto 220672 B 0 B / +0.0% 21380 B 0 B / +0.0% 1.884 s -15.43 ms / -0.8% (better) 11.351 ms -1.983 ms / -14.9% (better)
Core language and compiler benchmarks
Platform Benchmark ns/op vs base
Linux BenchmarkLookupPCRandom 14.410 ns/op -0.28 ns/op / -1.9% (better)
Linux BenchmarkMergeCompilerFlags 196.700 ns/op +2.4 ns/op / +1.2% (worse)
Linux BenchmarkMergeLinkerFlags 126.300 ns/op +0.1 ns/op / +0.1% (worse)
Linux BenchmarkChannelBuffered 55 ns/op -0.13 ns/op / -0.2% (better)
Linux BenchmarkChannelHandoff 13088 ns/op -432 ns/op / -3.2% (better)
Linux BenchmarkDefer 46.930 ns/op -1.36 ns/op / -2.8% (better)
Linux BenchmarkDirectCall 1.164 ns/op -0.002 ns/op / -0.2% (better)
Linux BenchmarkGlobalRead 1.164 ns/op -0.001 ns/op / -0.1% (better)
Linux BenchmarkGlobalWrite 7.755 ns/op -0.012 ns/op / -0.2% (better)
Linux BenchmarkGoroutine 24285 ns/op -8346 ns/op / -25.6% (better)
Linux BenchmarkInterfaceCall 5.816 ns/op -0.015 ns/op / -0.3% (better)
Linux BenchmarkRuntimeGetG 3.030 ns/op +0.121 ns/op / +4.2% (worse)
macOS BenchmarkLookupPCRandom 12.590 ns/op -2.83 ns/op / -18.4% (better)
macOS BenchmarkMergeCompilerFlags 115 ns/op -38.9 ns/op / -25.3% (better)
macOS BenchmarkMergeLinkerFlags 110.200 ns/op +19.81 ns/op / +21.9% (worse)
macOS BenchmarkChannelBuffered 29.510 ns/op -6.27 ns/op / -17.5% (better)
macOS BenchmarkChannelHandoff 9613 ns/op +1779 ns/op / +22.7% (worse)
macOS BenchmarkDefer 39.370 ns/op -9.09 ns/op / -18.8% (better)
macOS BenchmarkDirectCall 1.118 ns/op -0.041 ns/op / -3.5% (better)
macOS BenchmarkGlobalRead 1.340 ns/op -0.001 ns/op / -0.1% (better)
macOS BenchmarkGlobalWrite 1.120 ns/op -0.218 ns/op / -16.3% (better)
macOS BenchmarkGoroutine 69175 ns/op +3885 ns/op / +6.0% (worse)
macOS BenchmarkInterfaceCall 4.075 ns/op -1.355 ns/op / -25.0% (better)
macOS BenchmarkRuntimeGetG 2.528 ns/op -0.319 ns/op / -11.2% (better)
Windows MinGW BenchmarkLookupPCRandom 9.501 ns/op -0.128 ns/op / -1.3% (better)
Windows MinGW BenchmarkMergeCompilerFlags 419.400 ns/op +9 ns/op / +2.2% (worse)
Windows MinGW BenchmarkMergeLinkerFlags 359.600 ns/op +13.1 ns/op / +3.8% (worse)
Windows MinGW BenchmarkChannelBuffered 23.790 ns/op +0.14 ns/op / +0.6% (worse)
Windows MinGW BenchmarkChannelHandoff 1135 ns/op -57 ns/op / -4.8% (better)
Windows MinGW BenchmarkDefer 43.050 ns/op -2.37 ns/op / -5.2% (better)
Windows MinGW BenchmarkDirectCall 1.357 ns/op 0 ns/op / +0.0%
Windows MinGW BenchmarkGlobalRead 1.357 ns/op -0.007 ns/op / -0.5% (better)
Windows MinGW BenchmarkGlobalWrite 2.166 ns/op +0.001 ns/op / +0.04619% (worse)
Windows MinGW BenchmarkGoroutine 60410 ns/op -3672 ns/op / -5.7% (better)
Windows MinGW BenchmarkInterfaceCall 6.793 ns/op -0.003 ns/op / -0.04414% (better)
Windows MinGW BenchmarkRuntimeGetG 1.902 ns/op -0.002 ns/op / -0.1% (better)
Windows MinGW 386 BenchmarkLookupPCRandom 26.530 ns/op -0.06 ns/op / -0.2% (better)
Windows MinGW 386 BenchmarkMergeCompilerFlags 765 ns/op +52.6 ns/op / +7.4% (worse)
Windows MinGW 386 BenchmarkMergeLinkerFlags 692.100 ns/op -4.4 ns/op / -0.6% (better)
Windows MinGW 386 BenchmarkChannelBuffered 41.190 ns/op -0.1 ns/op / -0.2% (better)
Windows MinGW 386 BenchmarkChannelHandoff 915.200 ns/op +20 ns/op / +2.2% (worse)
Windows MinGW 386 BenchmarkDefer 44.240 ns/op -2.82 ns/op / -6.0% (better)
Windows MinGW 386 BenchmarkDirectCall 1.550 ns/op 0 ns/op / +0.0%
Windows MinGW 386 BenchmarkGlobalRead 1.550 ns/op -0.002 ns/op / -0.1% (better)
Windows MinGW 386 BenchmarkGlobalWrite 7.784 ns/op +0.002 ns/op / +0.0257% (worse)
Windows MinGW 386 BenchmarkGoroutine 110777 ns/op -1682 ns/op / -1.5% (better)
Windows MinGW 386 BenchmarkInterfaceCall 8.402 ns/op +0.017 ns/op / +0.2% (worse)
Windows MinGW 386 BenchmarkRuntimeGetG 1.925 ns/op -0.001 ns/op / -0.1% (better)
Windows MinGW ARM64 BenchmarkLookupPCRandom 12.140 ns/op 0 ns/op / +0.0%
Windows MinGW ARM64 BenchmarkMergeCompilerFlags 574.700 ns/op +0.2 ns/op / +0.03481% (worse)
Windows MinGW ARM64 BenchmarkMergeLinkerFlags 537 ns/op +4 ns/op / +0.8% (worse)
Windows MinGW ARM64 BenchmarkChannelBuffered 37.590 ns/op -1.39 ns/op / -3.6% (better)
Windows MinGW ARM64 BenchmarkChannelHandoff 1654 ns/op -30 ns/op / -1.8% (better)
Windows MinGW ARM64 BenchmarkDefer 56.130 ns/op +2.27 ns/op / +4.2% (worse)
Windows MinGW ARM64 BenchmarkDirectCall 0.663 ns/op -0.0006 ns/op / -0.1% (better)
Windows MinGW ARM64 BenchmarkGlobalRead 0.663 ns/op +0.0001 ns/op / +0.01508% (worse)
Windows MinGW ARM64 BenchmarkGlobalWrite 0.737 ns/op 0 ns/op / +0.0%
Windows MinGW ARM64 BenchmarkGoroutine 61360 ns/op -1808 ns/op / -2.9% (better)
Windows MinGW ARM64 BenchmarkInterfaceCall 4.144 ns/op -0.004 ns/op / -0.1% (better)
Windows MinGW ARM64 BenchmarkRuntimeGetG 1.770 ns/op -0.037 ns/op / -2.0% (better)
Windows MSVC BenchmarkLookupPCRandom 12.650 ns/op -0.6 ns/op / -4.5% (better)
Windows MSVC BenchmarkMergeCompilerFlags 629.500 ns/op -5.5 ns/op / -0.9% (better)
Windows MSVC BenchmarkMergeLinkerFlags 542.400 ns/op -10.7 ns/op / -1.9% (better)
Windows MSVC BenchmarkChannelBuffered 29.670 ns/op -0.02 ns/op / -0.1% (better)
Windows MSVC BenchmarkChannelHandoff 1118 ns/op +55 ns/op / +5.2% (worse)
Windows MSVC BenchmarkDefer 53.280 ns/op -0.35 ns/op / -0.7% (better)
Windows MSVC BenchmarkDirectCall 1.552 ns/op +0.003 ns/op / +0.2% (worse)
Windows MSVC BenchmarkGlobalRead 1.549 ns/op 0 ns/op / +0.0%
Windows MSVC BenchmarkGlobalWrite 2.469 ns/op +0.002 ns/op / +0.1% (worse)
Windows MSVC BenchmarkGoroutine 89800 ns/op -65 ns/op / -0.1% (better)
Windows MSVC BenchmarkInterfaceCall 8.993 ns/op +0.011 ns/op / +0.1% (worse)
Windows MSVC BenchmarkRuntimeGetG 2.487 ns/op +0.009 ns/op / +0.4% (worse)
Windows MSVC 386 BenchmarkLookupPCRandom 26.500 ns/op +0.01 ns/op / +0.03775% (worse)
Windows MSVC 386 BenchmarkMergeCompilerFlags 761 ns/op +5.7 ns/op / +0.8% (worse)
Windows MSVC 386 BenchmarkMergeLinkerFlags 698.700 ns/op +24.8 ns/op / +3.7% (worse)
Windows MSVC 386 BenchmarkChannelBuffered 38.790 ns/op -5.96 ns/op / -13.3% (better)
Windows MSVC 386 BenchmarkChannelHandoff 921 ns/op -3.5 ns/op / -0.4% (better)
Windows MSVC 386 BenchmarkDefer 48 ns/op -2.01 ns/op / -4.0% (better)
Windows MSVC 386 BenchmarkDirectCall 1.548 ns/op 0 ns/op / +0.0%
Windows MSVC 386 BenchmarkGlobalRead 1.550 ns/op -0.001 ns/op / -0.1% (better)
Windows MSVC 386 BenchmarkGlobalWrite 7.784 ns/op -0.001 ns/op / -0.01285% (better)
Windows MSVC 386 BenchmarkGoroutine 107926 ns/op -3170 ns/op / -2.9% (better)
Windows MSVC 386 BenchmarkInterfaceCall 8.383 ns/op +0.005 ns/op / +0.1% (worse)
Windows MSVC 386 BenchmarkRuntimeGetG 2.170 ns/op -0.017 ns/op / -0.8% (better)
Windows MSVC ARM64 BenchmarkLookupPCRandom 12.160 ns/op +0.1 ns/op / +0.8% (worse)
Windows MSVC ARM64 BenchmarkMergeCompilerFlags 578.300 ns/op +7.9 ns/op / +1.4% (worse)
Windows MSVC ARM64 BenchmarkMergeLinkerFlags 527.800 ns/op -4.5 ns/op / -0.8% (better)
Windows MSVC ARM64 BenchmarkChannelBuffered 38.600 ns/op +1.08 ns/op / +2.9% (worse)
Windows MSVC ARM64 BenchmarkChannelHandoff 2055 ns/op +207 ns/op / +11.2% (worse)
Windows MSVC ARM64 BenchmarkDefer 63.060 ns/op +0.38 ns/op / +0.6% (worse)
Windows MSVC ARM64 BenchmarkDirectCall 0.664 ns/op 0 ns/op / +0.0%
Windows MSVC ARM64 BenchmarkGlobalRead 0.663 ns/op -0.0002 ns/op / -0.03014% (better)
Windows MSVC ARM64 BenchmarkGlobalWrite 3.796 ns/op -0.001 ns/op / -0.02634% (better)
Windows MSVC ARM64 BenchmarkGoroutine 59076 ns/op +2622 ns/op / +4.6% (worse)
Windows MSVC ARM64 BenchmarkInterfaceCall 4.146 ns/op -0.003 ns/op / -0.1% (better)
Windows MSVC ARM64 BenchmarkRuntimeGetG 1.811 ns/op +0.042 ns/op / +2.4% (worse)
Timer runtime benchmarks
Platform Operation and runtime ns/op vs base
Linux AfterFuncZeroDelivery/Go 896.700 ns/op -16.4 ns/op / -1.8% (better)
Linux AfterFuncZeroDelivery/LLGo 41546 ns/op +4714 ns/op / +12.8% (worse)
Linux CreateStop/Go 288.800 ns/op -2.1 ns/op / -0.7% (better)
Linux CreateStop/LLGo 1905 ns/op +24 ns/op / +1.3% (worse)
Linux RearmStopped/Go 115.600 ns/op -0.2 ns/op / -0.2% (better)
Linux RearmStopped/LLGo 1257 ns/op +59 ns/op / +4.9% (worse)
Linux ResetActive/Go 68.440 ns/op -0.08 ns/op / -0.1% (better)
Linux ResetActive/LLGo 897.900 ns/op +68.2 ns/op / +8.2% (worse)
Linux ResetHeap1024/Go 67.050 ns/op -0.16 ns/op / -0.2% (better)
Linux ResetHeap1024/LLGo 176 ns/op +0.9 ns/op / +0.5% (worse)
macOS AfterFuncZeroDelivery/Go 536 ns/op -8.4 ns/op / -1.5% (better)
macOS AfterFuncZeroDelivery/LLGo 116033 ns/op +6645 ns/op / +6.1% (worse)
macOS CreateStop/Go 138.700 ns/op -40.1 ns/op / -22.4% (better)
macOS CreateStop/LLGo 565.100 ns/op -356.8 ns/op / -38.7% (better)
macOS RearmStopped/Go 63.220 ns/op -7.48 ns/op / -10.6% (better)
macOS RearmStopped/LLGo 501.300 ns/op +0.8 ns/op / +0.2% (worse)
macOS ResetActive/Go 46.730 ns/op -2.44 ns/op / -5.0% (better)
macOS ResetActive/LLGo 252.300 ns/op -13.7 ns/op / -5.2% (better)
macOS ResetHeap1024/Go 52.040 ns/op -0.63 ns/op / -1.2% (better)
macOS ResetHeap1024/LLGo 103.400 ns/op +9.69 ns/op / +10.3% (worse)
Windows MinGW AfterFuncZeroDelivery/Go 374 ns/op -13.7 ns/op / -3.5% (better)
Windows MinGW AfterFuncZeroDelivery/LLGo 121536 ns/op -3615 ns/op / -2.9% (better)
Windows MinGW CreateStop/Go 89.740 ns/op -0.87 ns/op / -1.0% (better)
Windows MinGW CreateStop/LLGo 342.300 ns/op -37.7 ns/op / -9.9% (better)
Windows MinGW RearmStopped/Go 24.500 ns/op -0.07 ns/op / -0.3% (better)
Windows MinGW RearmStopped/LLGo 217.800 ns/op -4.6 ns/op / -2.1% (better)
Windows MinGW ResetActive/Go 14.820 ns/op -0.04 ns/op / -0.3% (better)
Windows MinGW ResetActive/LLGo 122.700 ns/op +0.3 ns/op / +0.2% (worse)
Windows MinGW ResetHeap1024/Go 14.830 ns/op -0.09 ns/op / -0.6% (better)
Windows MinGW ResetHeap1024/LLGo 108.200 ns/op 0 ns/op / +0.0%
Windows MinGW 386 AfterFuncZeroDelivery/Go 986.500 ns/op +29.7 ns/op / +3.1% (worse)
Windows MinGW 386 AfterFuncZeroDelivery/LLGo 204907 ns/op +4405 ns/op / +2.2% (worse)
Windows MinGW 386 CreateStop/Go 194 ns/op +3.3 ns/op / +1.7% (worse)
Windows MinGW 386 CreateStop/LLGo 511.500 ns/op -0.1 ns/op / -0.01955% (better)
Windows MinGW 386 RearmStopped/Go 63.690 ns/op +0.23 ns/op / +0.4% (worse)
Windows MinGW 386 RearmStopped/LLGo 353.800 ns/op -18.6 ns/op / -5.0% (better)
Windows MinGW 386 ResetActive/Go 39.140 ns/op +0.03 ns/op / +0.1% (worse)
Windows MinGW 386 ResetActive/LLGo 933.900 ns/op +426.6 ns/op / +84.1% (worse)
Windows MinGW 386 ResetHeap1024/Go 39.540 ns/op -0.21 ns/op / -0.5% (better)
Windows MinGW 386 ResetHeap1024/LLGo 188.100 ns/op +1.1 ns/op / +0.6% (worse)
Windows MinGW ARM64 AfterFuncZeroDelivery/Go 662.600 ns/op -3.3 ns/op / -0.5% (better)
Windows MinGW ARM64 AfterFuncZeroDelivery/LLGo 144356 ns/op +1848 ns/op / +1.3% (worse)
Windows MinGW ARM64 CreateStop/Go 201.600 ns/op +2.7 ns/op / +1.4% (worse)
Windows MinGW ARM64 CreateStop/LLGo 440.200 ns/op -10.9 ns/op / -2.4% (better)
Windows MinGW ARM64 RearmStopped/Go 70.610 ns/op -0.01 ns/op / -0.01416% (better)
Windows MinGW ARM64 RearmStopped/LLGo 256.700 ns/op -8.1 ns/op / -3.1% (better)
Windows MinGW ARM64 ResetActive/Go 31.010 ns/op -0.11 ns/op / -0.4% (better)
Windows MinGW ARM64 ResetActive/LLGo 141.300 ns/op -4.9 ns/op / -3.4% (better)
Windows MinGW ARM64 ResetHeap1024/Go 31.120 ns/op -0.06 ns/op / -0.2% (better)
Windows MinGW ARM64 ResetHeap1024/LLGo 124.200 ns/op -0.1 ns/op / -0.1% (better)
Windows MSVC AfterFuncZeroDelivery/Go 563.200 ns/op -2.1 ns/op / -0.4% (better)
Windows MSVC AfterFuncZeroDelivery/LLGo 173324 ns/op -1797 ns/op / -1.0% (better)
Windows MSVC CreateStop/Go 117.400 ns/op -1.1 ns/op / -0.9% (better)
Windows MSVC CreateStop/LLGo 412.500 ns/op -5.9 ns/op / -1.4% (better)
Windows MSVC RearmStopped/Go 31.380 ns/op +0.02 ns/op / +0.1% (worse)
Windows MSVC RearmStopped/LLGo 262.500 ns/op +11.4 ns/op / +4.5% (worse)
Windows MSVC ResetActive/Go 20.050 ns/op -0.06 ns/op / -0.3% (better)
Windows MSVC ResetActive/LLGo 159.300 ns/op +18.5 ns/op / +13.1% (worse)
Windows MSVC ResetHeap1024/Go 20.400 ns/op -0.17 ns/op / -0.8% (better)
Windows MSVC ResetHeap1024/LLGo 124.400 ns/op +0.2 ns/op / +0.2% (worse)
Windows MSVC 386 AfterFuncZeroDelivery/Go 959.500 ns/op +6.6 ns/op / +0.7% (worse)
Windows MSVC 386 AfterFuncZeroDelivery/LLGo 201584 ns/op +2006 ns/op / +1.0% (worse)
Windows MSVC 386 CreateStop/Go 196.300 ns/op +5.1 ns/op / +2.7% (worse)
Windows MSVC 386 CreateStop/LLGo 463.800 ns/op +26.1 ns/op / +6.0% (worse)
Windows MSVC 386 RearmStopped/Go 63.380 ns/op -0.1 ns/op / -0.2% (better)
Windows MSVC 386 RearmStopped/LLGo 324.200 ns/op -5.6 ns/op / -1.7% (better)
Windows MSVC 386 ResetActive/Go 39 ns/op +0.22 ns/op / +0.6% (worse)
Windows MSVC 386 ResetActive/LLGo 969.500 ns/op +3 ns/op / +0.3% (worse)
Windows MSVC 386 ResetHeap1024/Go 39.310 ns/op +0.05 ns/op / +0.1% (worse)
Windows MSVC 386 ResetHeap1024/LLGo 170.300 ns/op -2.8 ns/op / -1.6% (better)
Windows MSVC ARM64 AfterFuncZeroDelivery/Go 661.900 ns/op -7.2 ns/op / -1.1% (better)
Windows MSVC ARM64 AfterFuncZeroDelivery/LLGo 172457 ns/op +10207 ns/op / +6.3% (worse)
Windows MSVC ARM64 CreateStop/Go 196.200 ns/op +3.9 ns/op / +2.0% (worse)
Windows MSVC ARM64 CreateStop/LLGo 469.900 ns/op -9.7 ns/op / -2.0% (better)
Windows MSVC ARM64 RearmStopped/Go 70.590 ns/op +0.04 ns/op / +0.1% (worse)
Windows MSVC ARM64 RearmStopped/LLGo 281.500 ns/op +4.3 ns/op / +1.6% (worse)
Windows MSVC ARM64 ResetActive/Go 31.060 ns/op +0.13 ns/op / +0.4% (worse)
Windows MSVC ARM64 ResetActive/LLGo 147.300 ns/op -3.4 ns/op / -2.3% (better)
Windows MSVC ARM64 ResetHeap1024/Go 31.150 ns/op +0.12 ns/op / +0.4% (worse)
Windows MSVC ARM64 ResetHeap1024/LLGo 138.100 ns/op +0.3 ns/op / +0.2% (worse)

Compared with 1b01cb9724ba measured in the same runner job.

Comment thread internal/build/wasm_reflect.go Outdated
@cpunion
cpunion force-pushed the codex/fix-size-wasm-correctness-2679-20261003 branch from 5c73eaf to f7d0191 Compare October 4, 2026 06:47
@cpunion
cpunion force-pushed the codex/fix-size-wasm-correctness-2679-20261003 branch from f7d0191 to 3976fa3 Compare October 4, 2026 15:01
@cpunion
cpunion merged commit 900ddb3 into xgo-dev:main Oct 4, 2026
98 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants